perm filename IMPSTA.MID[NET,MRC]1 blob
sn#336694 filedate 1978-02-20 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00008 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE IMPSTAT
C00005 00003 Start of program
C00007 00004 Set up display of IMP status
C00009 00005 Local socket, byte size, state
C00011 00006 Allocations
C00013 00007 Display it!
C00015 00008 Random stuff
C00017 ENDMK
C⊗;
TITLE IMPSTAT
; Display IMP status. Display routines based on ME routines in UUO manual
X==1 ? Y==2 ? Z==3 ? L==4 ? I==5 ? N==6 ? DDB==7 ? J==10 ? P==17
; GETLIN bits
IIILIN==400000,, ; terminal is a III
DMLIN== 040000,, ; terminal is a DM
DDDLIN==020000,, ; terminal is a DD
ILM== 020000 ; MPV occured
; Data Risc command word
DEFINE CW ?C1,B1,C2,B2,C3,B3
<<B1←28.>\<B2←20.>\<B3←12.>\<C1←9.>\<C2←6.>\<C3←3>\4>
TERMIN
; Data Risc command names
EXCT== 0 ; execute
FNCN== 1 ; function, usual value bytes
ALPHBG==6 ? ALPHA==46
CHNL== 2 ; channel select
COLM== 3 ; column select
HILIN== 4 ; set high 5 bits of line address
LOLIN== 5 ; set low 4 bits of line address
; IMP status bits
RFCS== 200000,, ; RFC sent
RFCR== 100000,, ; RFC received
CLSS== 040000,, ; CLS sent
CLSR== 020000,, ; CLS received
; IMP DDB stuff
DEVCHR==400001 ; characteristics
DEVIOS==400002 ; I/O status
ALLW== 020000,, ; allocation wait
MAL== 400014 ; message allocation
BAL== 400015 ; bit allocation
NHMA== 400016 ; nominal message allocation
NHBA== 400017 ; nominal bit allocation
HMA== 400022 ; remote message allocation
HBA== 400023 ; remote bit allocation
MIIL== 400024 ; messages in input list
BIIL== 400025 ; bits in input list
; Pointers into the monitor
FFLNK: 0 ; first free link
; Pntrs indexed up by 1, so RH is addr-1
LNKTAB: (I) ; host-link number
IMPDDB: (I) ; address of DDB
IMPLS: (I) ; local socket number
IMPFS: (I) ; foreign socket number
IMPBS: (I) ; byte size
IMPSTB: (I) ; link status
; Ordinary pointers
PRJPRG: (J) ; PPN
JOBNAM: (J) ; program name
; Random data
PDLLEN==50.
PDL: BLOCK PDLLEN
LINCNT: BLOCK 1 ; line count
SUBTTL Start of program
IMPSTA: JFCL
RESET
MOVE P,[PDL(-PDLLEN)]
; Make sure we never lose with MPV
MOVEI [ MOVEM JOBVER ; stuff 0 away some random place
MOVE JOBREL
ADDI 2000 ; another K of core, please
CORE
JRST 4,IMPSTA
MOVE JOBVER
JRST 2,@JOBTPC] ; dismiss interrupt
MOVEM JOBAPR
MOVEI ILM
APRENB
; Snarf up some monitor symbols
MOVEI X,[.RSQZ 0,FFLNK ? 0]
.SYML X,
JRST 4,.-1
ADDI X,400000
MOVEM X,FFLNK
IRPS SYM,,LNKTAB IMPDDB IMPLS IMPFS IMPBS IMPSTB
MOVEI X,[.RSQZ 0,SYM ? 0]
.SYML X,
JRST 4,.-1
ADDI X,377777
HRRM X,SYM
TERMIN
IRPS SYM,,PRJPRG JOBNAM
MOVEI X,[.RSQZ 0,SYM ? 0]
.SYML X,
JRST 4,.-1
ADDI X,400000
HRRM X,SYM
TERMIN
; Map the monitor in
MOVSI 377777
SETPR2
JRST 4,.-1
; Get terminal characteristics
SETO L, ; this console
GETLIN L
AOJE L,[EXIT] ; detached
HRROI [015000,,LINCNT]
TTYSET
MOVNI 4
ADDM LINCNT
PPSEL 1
DPYPOS -452 ; near botton of screen
DPYSIZ 3002 ; 3 glitches, 2 lines/glitch
; JRST GETNET
SUBTTL Set up display of IMP status
; Initialize statistics printer
GETNET: SETZM SCREEN
MOVE [SCREEN,,SCREEN+1]
BLT @SCREND
MOVE X,[440700,,SCREEN]
PUSH P,LINCNT
SETZM LINCNT
TLNN (DMLIN)
JRST HDNODM
MOVEI 177
IDPB X
MOVEI ↑W
IDPB X
HDNODM: SKIPN I,@FFLNK
JRST [ JSP Y,TXTSTR
ASCIZ/ Nobody is using the IMP!
/
JRST MSGEND]
JSP Y,TXTSTR
ASCIZ/Idx Hst Lnk For'n skt Local skt BS Status Job User Subsys Allocs
/
TLNN (DMLIN)
JRST NXTLNK
MOVEI 177
IDPB X
MOVEI ↑W
IDPB X
; Individual link print routine
NXTLNK: MOVEI <" >
IDPB X
MOVEI Y,(I)
MOVEI N,2
PUSHJ P,OCTOUT ; table index
MOVEI <" >
IDPB X
LDB Y,[101000,,@LNKTAB]
MOVEI N,3
PUSHJ P,OCTOUT ; host number
MOVEI <" >
IDPB X
LDB Y,[001000,,@LNKTAB]
MOVEI N,3
PUSHJ P,OCTOUT ; link number
MOVEI <" >
IDPB X
MOVE Y,@IMPFS ; foreign socket number
CAMN Y,[-1]
JRST [ JSP Y,TXTSTR
ASCIZ/ listening/
JRST DPYLS]
MOVEI N,11.
PUSHJ P,OCTOUT
; (continued on next page)
; Local socket, byte size, state
DPYLS: MOVEI <" >
IDPB X
MOVE Y,@IMPLS ; local socket number
MOVEI N,11.
PUSHJ P,OCTOUT
MOVEI <" >
IDPB X
MOVE Y,@IMPBS ; byte size
MOVEI N,2
PUSHJ P,DECOUT
MOVE @IMPSTB
TLNN (CLSS\CLSR)
JRST NOTCLS
TLNN (CLSS)
JRST [ JSP Y,TXTSTR
ASCIZ/ CLSFH /
JRST STADUN]
TLNN (CLSR)
JRST [ JSP Y,TXTSTR
ASCIZ/ CLSSNT/
JRST STADUN]
JSP Y,TXTSTR
ASCIZ/ CLOSED/
JRST STADUN
NOTCLS: TLNN (RFCS\RFCR)
JRST [ JSP Y,TXTSTR
ASCIZ/ LISTEN/
JRST STADUN]
TLNN (RFCS)
JRST [ JSP Y,TXTSTR
ASCIZ/ RFCFH /
JRST STADUN]
TLNN (RFCR)
JRST [ JSP Y,TXTSTR
ASCIZ/ RFCSNT/
JRST STADUN]
JSP Y,TXTSTR
ASCIZ/ OPENED/
; Start of DDB stuff
STADUN: SKIPN DDB,@IMPDDB
JRST NODDB ; no DDB for this guy
MOVEI <" >
IDPB X
MOVE Y,DEVCHR(DDB)
LSH Y,-30.
MOVEI J,(Y)
MOVEI N,3
PUSHJ P,DECOUT
MOVEI <" >
IDPB X
MOVE Y,@PRJPRG
PUSHJ P,SIXOUT
MOVEI <" >
IDPB X
MOVE Y,@JOBNAM
PUSHJ P,SIXOUT
MOVEI <" >
IDPB X
MOVE Y,DEVIOS(DDB)
TLNE Y,(ALLW)
MOVEI "W
IDPB X
; (continued on next page)
; Allocations
MOVE @IMPLS
TRNN 1 ; send or receive?
JRST [ MOVE Y,HMA(DDB) ; receive; foreign message allocation
PUSHJ P,DECOUT
MOVEI "/
IDPB X
MOVE Y,HBA(DDB)
PUSHJ P,DECOUT
SKIPN Y,MIIL(DDB) ; messages in input list
JRST NODDB
MOVEI <" >
IDPB X
MOVEI "[
IDPB X
PUSHJ P,DECOUT
MOVEI "/
IDPB X
MOVE Y,BIIL(DDB) ; bits in input list
PUSHJ P,DECOUT
MOVEI "]
IDPB X
JRST NODDB]
MOVE Y,MAL(DDB) ; send socket; message allocation
PUSHJ P,DECOUT ; note N←-1 from last DECOUT call
MOVEI "/
IDPB X
MOVE Y,BAL(DDB) ; bit allocation
PUSHJ P,DECOUT
MOVEI <" >
IDPB X
NODDB: JSP Y,TXTSTR
ASCIZ/
/
AOS LINCNT
TLNN (DMLIN)
JRST NODDB0
MOVEI 177
IDPB X
MOVEI ↑W
IDPB X
NODDB0: SOJG I,NXTLNK
; Went through all the links
MSGEND: POP P,Z
TLNE L,(DDDLIN\DMLIN)
CLREOF: CAMGE Z,LINCNT
JRST NODDDM ; III or printing
MOVEI 177
TLNE L,(DMLIN)
IDPB X
TLNE L,(DMLIN)
SKIPA Y,[↑W]
MOVEI Y,<" >
IDPB Y,X
MOVEI ↑M
IDPB X
MOVEI ↑J
IDPB X
SOJA Z,CLREOF
; (continued on next page)
SUBTTL Display it!
NODDDM: TLNN X,700000 ; if at word boundry
ADDI X,1
SETZM 1(X) ; HALT to stop program
MOVEI X,(X)
MOVEM X,SCREND
MOVEI 2(X)
SUBI DPPROG
MOVEM DPHEAD+1 ; save display program length
AOS (X)
CAIE X,SCREEN
SOJA X,.-2
; Now output the accumulated text
TLNN L,(DDDLIN\IIILIN\DMLIN)
JRST [ OUTSTR SCREEN
OUTSTR [ASCIZ/
/]
JRST DELAY]
JUMPL L,DOIII
TLNE L,(DMLIN)
JRST [ SETZM DPPROG
MOVE X,[.BYTE 7 ? 177 ? ↑L ? 140 ? 143]; cursor at fourth line
JRST DODM]
MOVE TXTOUT
MOVEM DPPROG
SKIPA X,COLPOS
DOIII: MOVE X,[.BYTE 11.,11.,3,3,2,2,4 ? -777 ? 640 ? 2 ? 3 ? 1 ? 2 ? 6]
DODM: MOVEM X,DPPROG+1
UPGIOT 1,DPHEAD ; display the text
; Done, wait twenty seconds and go again
DELAY: MOVEI 20.
TLNE L,(DDDLIN\IIILIN)
MOVEI 1
TLNE L,(DMLIN)
MOVEI 5.
SLEEP
INCHRS
CAIA
JRST [CAIN ↑M
INCHRW
PPSEL
EXIT 1,
PPSEL 1
DPYPOS -452 ; near botton of screen
DPYSIZ 3002 ; 3 glitches, 2 lines/glitch
HRROI [015000,,LINCNT]
TTYSET
MOVNI 4
ADDM LINCNT
JRST GETNET]
JRST GETNET
SUBTTL Random stuff
; Octal/decimal output of Y. If N > 0, pad with spaces so it fits in N digits
DECOUT: SKIPA Z,[10.]
OCTOUT: MOVEI Z,8.
HRRM Z,NUMOUT ; I don't want to fry another AC
NUMOUT: IDIVI Y,
ADDI Z,"0
PUSH P,Z
SOSG N
JRST NUMOU1
JUMPN Y,NUMOU2
MOVEI Z,<" >
IDPB Z,X
SOJG N,.-1
JRST NUMOU3
NUMOU1: SKIPE Y
NUMOU2: PUSHJ P,NUMOUT
NUMOU3: POP P,Y
IDPB Y,X
POPJ P,
; Sixbit output routine
SIXOUT: MOVEI N,6
SETZ Z,
ROTC Y,6
ADDI Z,"A-'A
IDPB Z,X
SOJG N,SIXOUT+1
POPJ P,
; Output text string, called with JSP
TXTSTR: HRLI Y,440700
ILDB Y
JUMPE 1(Y)
IDPB X
JRST TXTSTR+1
...LIT: CONSTA
SCREND: @JOBREL ; pointer to last word of display
; Display program stuff
COLPOS: CW COLM,2,HILIN,2,LOLIN,4 ; second column, fourth line
TXTOUT: CW FNCN,ALPHA,CHNL,0,FNCN,ALPHA ; text output
ERASE: ERASEP ? 2 ; erase DD screen
ERASEP: CW FNCN,17,CHNL,0,FNCN,ALPHA
0
DPHEAD: 200000,,DPPROG ; double field mode
0 ; size
0
DPPROG+1 ; address of low order line select for DD
DPPROG: BLOCK 2 ; some space
SCREEN: 0 ; display screen image
END IMPSTAT